package Multithreading.ThreadPool.ThreadPoolDome002;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * ClassName:ThreadPool002
 * Package:Multithreading.ThreadPool.ThreadPoolDome002
 * Description:
 *
 * @Author:ZhangXin
 * @Create:2023/3/7-17:36
 * @Version:v1.0
 */
public class ThreadPool002 {
    /*
    ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor
    (核心线程数量,最大线程数量,空线程最大存活时间,任务队列,创建线程工厂,任务的拒绝策略)

     * 自定义线程池
     * 1.核心线程数量 (不能小于0)
     * 2.线程池最大线程的数量(最大数量>=核心线程数量)
     * 3.空闲时间(值)(不能为0)
     * 4.空闲时间(单位)(用TimeUnit指定)
     * 5.阻塞队列(不能为null)
     * 6.创建线程的方式(不能为null)
     * 7.要执行的任务过多时的解决方案(不能为null)

     不断提交任务,会有以下三个临界点
     1.当核心线程满时,再提交任务就会排队
     2.当核心线程满,队伍满时,会创建临时线程
     3.当核心线程满,队伍满,临时线程满时,会触发任务拒绝策略
     */
    public static void main(String[] args) {
        ThreadPoolExecutor pool = new ThreadPoolExecutor(
                3, //核心线程数量,不能小于0
                6, //最大线程数,不能小于0,最大线程数量>=核心线程数量
                60,//空闲线程最大存活时间
                TimeUnit.SECONDS,//时间单位--秒
                new ArrayBlockingQueue<>(3),//任务队列
                Executors.defaultThreadFactory(),//创建线程工厂
                new ThreadPoolExecutor.AbortPolicy()//任务拒绝策略
        );

//        pool.submit();
    }
}
